home *** CD-ROM | disk | FTP | other *** search
/ PC World 2001 March / PCWorld_2001-03_cd.bin / Software / TemaCD / classbuild / ClassBuilder 2.2 PR405 Setup.exe / {app} / Include / CB_StaticMultiOwned.h < prev    next >
C/C++ Source or Header  |  2000-04-07  |  7KB  |  207 lines

  1. #ifndef CB_MULTI_STATIC_OWNED_H
  2. #define CB_MULTI_STATIC_OWNED_H
  3.  
  4. #include "CB_StaticMulti.h"
  5.  
  6. // defines for include files
  7. #define RELATION_STATIC_MULTI_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  8. public:\
  9.     static ClassTo* _first##NameTo;\
  10.     static ClassTo* _last##NameTo;\
  11.     static int _count##NameTo;\
  12. \
  13. protected:\
  14.     static void Add##NameTo##First(ClassTo* item);\
  15.     static void Add##NameTo##Last(ClassTo* item);\
  16.     static void Add##NameTo##After(ClassTo* item, ClassTo* pos);\
  17.     static void Add##NameTo##Before(ClassTo* item, ClassTo* pos);\
  18.     static void Remove##NameTo(ClassTo* item);\
  19.     static void Replace##NameTo(ClassTo* item, ClassTo* newItem);\
  20. \
  21. public:\
  22.     static void DeleteAll##NameTo();\
  23.     static ClassTo* GetFirst##NameTo();\
  24.     static ClassTo* GetLast##NameTo();\
  25.     static ClassTo* GetNext##NameTo(ClassTo* pos);\
  26.     static ClassTo* GetPrev##NameTo(ClassTo* pos);\
  27.     static int Get##NameTo##Count();\
  28.     static void Move##NameTo##First(ClassTo* item);\
  29.     static void Move##NameTo##Last(ClassTo* item);\
  30.     static void Move##NameTo##After(ClassTo* item, ClassTo* pos);\
  31.     static void Move##NameTo##Before(ClassTo* item, ClassTo* pos);\
  32.     static void Sort##NameTo(int (*comp)(ClassTo*, ClassTo*));\
  33.     ITERATOR_STATIC_MULTI_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  34.  
  35. #define RELATION_NOFILTER_STATIC_MULTI_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  36. public:\
  37.     static ClassTo* _first##NameTo;\
  38.     static ClassTo* _last##NameTo;\
  39.     static int _count##NameTo;\
  40. \
  41. protected:\
  42.     static void Add##NameTo##First(ClassTo* item);\
  43.     static void Add##NameTo##Last(ClassTo* item);\
  44.     static void Add##NameTo##After(ClassTo* item, ClassTo* pos);\
  45.     static void Add##NameTo##Before(ClassTo* item, ClassTo* pos);\
  46.     static void Remove##NameTo(ClassTo* item);\
  47.     static void Replace##NameTo(ClassTo* item, ClassTo* newItem);\
  48. \
  49. public:\
  50.     static void DeleteAll##NameTo();\
  51.     static ClassTo* GetFirst##NameTo();\
  52.     static ClassTo* GetLast##NameTo();\
  53.     static ClassTo* GetNext##NameTo(ClassTo* pos);\
  54.     static ClassTo* GetPrev##NameTo(ClassTo* pos);\
  55.     static int Get##NameTo##Count();\
  56.     static void Move##NameTo##First(ClassTo* item);\
  57.     static void Move##NameTo##Last(ClassTo* item);\
  58.     static void Move##NameTo##After(ClassTo* item, ClassTo* pos);\
  59.     static void Move##NameTo##Before(ClassTo* item, ClassTo* pos);\
  60.     static void Sort##NameTo(int (*comp)(ClassTo*, ClassTo*));\
  61.     ITERATOR_NOFILTER_STATIC_MULTI_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  62.  
  63. #define RELATION_STATIC_MULTI_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  64.     RELATION_STATIC_MULTI_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  65.  
  66. // defines implementation
  67. #define INIT_STATIC_MULTI_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  68.  
  69. #define EXIT_STATIC_MULTI_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  70.  
  71. #define REPLACE_STATIC_MULTI_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  72.  
  73. #define INIT_STATIC_MULTI_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  74.     assert(this);\
  75.     ClassFrom::_count##NameTo++;\
  76. \
  77.     if (ClassFrom::_last##NameTo)\
  78.     {\
  79.         _next##NameFrom = (ClassTo*)0;\
  80.         _prev##NameFrom = ClassFrom::_last##NameTo;\
  81.         _prev##NameFrom->_next##NameFrom = this;\
  82.         ClassFrom::_last##NameTo = this;\
  83.     }\
  84.     else\
  85.     {\
  86.         _prev##NameFrom = (ClassTo*)0;\
  87.         _next##NameFrom = (ClassTo*)0;\
  88.         ClassFrom::_first##NameTo = ClassFrom::_last##NameTo = this;\
  89.     }
  90.  
  91. #define EXIT_STATIC_MULTI_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  92.     EXIT_STATIC_MULTI_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  93.  
  94. #define REPLACE_STATIC_MULTI_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  95.     assert(this);\
  96.     assert(pOld);\
  97.     ClassFrom::NameTo##Iterator::Check(pOld, this);\
  98. \
  99.     if (pOld->_next##NameFrom)\
  100.         pOld->_next##NameFrom->_prev##NameFrom = this;\
  101.     else\
  102.         ClassFrom::_last##NameTo = this;\
  103. \
  104.     if (pOld->_prev##NameFrom)\
  105.         pOld->_prev##NameFrom->_next##NameFrom = this;\
  106.     else\
  107.         ClassFrom::_first##NameTo = this;\
  108. \
  109.     _next##NameFrom = pOld->_next##NameFrom;\
  110.     _prev##NameFrom = pOld->_prev##NameFrom;\
  111. \
  112.     pOld->_next##NameFrom = (ClassTo*)0;\
  113.     pOld->_prev##NameFrom = (ClassTo*)0;
  114.  
  115. #define METHODS_STATIC_MULTI_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  116.     ClassTo* ClassFrom##::_first##NameTo = (ClassTo*)0;\
  117.     ClassTo* ClassFrom##::_last##NameTo = (ClassTo*)0;\
  118.     int ClassFrom##::_count##NameTo = 0;\
  119. void ClassFrom##::Add##NameTo##First(ClassTo* item)\
  120. {\
  121.     METHOD_STATIC_MULTI_ADDFIRST(ClassFrom, NameFrom, ClassTo, NameTo) \
  122. }\
  123. \
  124. void ClassFrom##::Add##NameTo##Last(ClassTo* item)\
  125. {\
  126.     METHOD_STATIC_MULTI_ADDLAST(ClassFrom, NameFrom, ClassTo, NameTo) \
  127. }\
  128. \
  129. void ClassFrom##::Add##NameTo##After(ClassTo* item, ClassTo* pos)\
  130. {\
  131.     METHOD_STATIC_MULTI_ADDAFTER(ClassFrom, NameFrom, ClassTo, NameTo) \
  132. }\
  133. \
  134. void ClassFrom##::Add##NameTo##Before(ClassTo* item, ClassTo* pos)\
  135. {\
  136.     METHOD_STATIC_MULTI_ADDBEFORE(ClassFrom, NameFrom, ClassTo, NameTo) \
  137. }\
  138. \
  139. void ClassFrom##::Remove##NameTo(ClassTo* item)\
  140. {\
  141.     METHOD_STATIC_MULTI_REMOVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  142. }\
  143. \
  144. void ClassFrom##::DeleteAll##NameTo()\
  145. {\
  146.     METHOD_STATIC_MULTI_DELETEALL(ClassFrom, NameFrom, ClassTo, NameTo) \
  147. }\
  148. \
  149. void ClassFrom##::Replace##NameTo(ClassTo* item, ClassTo* newItem)\
  150. {\
  151.     METHOD_STATIC_MULTI_REPLACE(ClassFrom, NameFrom, ClassTo, NameTo) \
  152. }\
  153. \
  154. ClassTo* ClassFrom##::GetFirst##NameTo()\
  155. {\
  156.     METHOD_STATIC_MULTI_GETFIRST(ClassFrom, NameFrom, ClassTo, NameTo) \
  157. }\
  158. \
  159. ClassTo* ClassFrom##::GetLast##NameTo()\
  160. {\
  161.     METHOD_STATIC_MULTI_GETLAST(ClassFrom, NameFrom, ClassTo, NameTo) \
  162. }\
  163. \
  164. ClassTo* ClassFrom##::GetNext##NameTo(ClassTo* pos)\
  165. {\
  166.     METHOD_STATIC_MULTI_GETNEXT(ClassFrom, NameFrom, ClassTo, NameTo) \
  167. }\
  168. \
  169. ClassTo* ClassFrom##::GetPrev##NameTo(ClassTo* pos)\
  170. {\
  171.     METHOD_STATIC_MULTI_GETPREV(ClassFrom, NameFrom, ClassTo, NameTo) \
  172. }\
  173. \
  174. int ClassFrom##::Get##NameTo##Count()\
  175. {\
  176.     METHOD_STATIC_MULTI_GETCOUNT(ClassFrom, NameFrom, ClassTo, NameTo) \
  177. }\
  178. \
  179. void ClassFrom##::Move##NameTo##First(ClassTo* item)\
  180. {\
  181.     METHOD_STATIC_MULTI_MOVEFIRST(ClassFrom, NameFrom, ClassTo, NameTo) \
  182. }\
  183. \
  184. void ClassFrom##::Move##NameTo##Last(ClassTo* item)\
  185. {\
  186.     METHOD_STATIC_MULTI_MOVELAST(ClassFrom, NameFrom, ClassTo, NameTo) \
  187. }\
  188. \
  189. void ClassFrom##::Move##NameTo##After(ClassTo* item, ClassTo* pos)\
  190. {\
  191.     METHOD_STATIC_MULTI_MOVEAFTER(ClassFrom, NameFrom, ClassTo, NameTo) \
  192. }\
  193. \
  194. void ClassFrom##::Move##NameTo##Before(ClassTo* item, ClassTo* pos)\
  195. {\
  196.     METHOD_STATIC_MULTI_MOVEBEFORE(ClassFrom, NameFrom, ClassTo, NameTo) \
  197. }\
  198. \
  199. void ClassFrom##::Sort##NameTo(int (*comp)(ClassTo*, ClassTo*))\
  200. {\
  201.     METHOD_STATIC_MULTI_SORT(ClassFrom, NameFrom, ClassTo, NameTo) \
  202. }
  203.  
  204. #define METHODS_STATIC_MULTI_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  205.  
  206. #endif
  207.